"""
数据清洗验证模块
该模块负责验证数据清洗的输入文件格式
"""
import pandas as pd
import os
import logging

# 创建日志记录器
logger = logging.getLogger(__name__)

def check_source_file(file_path: str) -> bool:
    """
    验证源文件是否符合清洗要求
    
    Args:
        file_path: Excel文件路径
        
    Returns:
        如果文件格式正确返回True，否则抛出异常
    """
    logger.info(f"开始验证文件: {file_path}")
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"文件不存在: {file_path}")
    
    # 检查文件格式
    if not file_path.endswith(('.xlsx', '.xls')):
        raise ValueError("只支持Excel文件格式 (.xlsx, .xls)")
    
    try:
        # 读取Excel文件
        df = pd.read_excel(file_path)
        
        # 检查是否为空文件
        if df.empty:
            raise ValueError("Excel文件不能为空")
        
        # 检查必要的列是否存在
        required_columns = ['商品名称']
        missing_columns = [col for col in required_columns if col not in df.columns]
        
        if missing_columns:
            raise ValueError(f"Excel文件必须包含以下列: {', '.join(missing_columns)}")
        
        # 检查商品名称列的有效性
        if df['商品名称'].isnull().all():
            raise ValueError("'商品名称'列不能全为空")
        
        logger.info(f"文件验证通过，共找到 {len(df)} 条记录")
        return True
    
    except Exception as e:
        if isinstance(e, ValueError):
            # 如果是我们自己抛出的验证错误，直接向上传递
            raise
        else:
            # 其他错误转化为验证错误
            logger.error(f"文件验证失败: {str(e)}")
            raise ValueError(f"无法处理Excel文件：{str(e)}") 